package com.coursehub.progress.repository;

import com.coursehub.progress.entity.StudentChapter;
import com.coursehub.progress.entity.StudentChapterId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 学生章节学习进度数据访问层
 */
@Repository
public interface StudentChapterRepository extends JpaRepository<StudentChapter, StudentChapterId> {
    
    /**
     * 根据用户ID查找所有章节学习进度
     */
    List<StudentChapter> findByUserId(String userId);
    
    /**
     * 根据章节ID查找所有学生的学习进度
     */
    List<StudentChapter> findByChapterId(String chapterId);
    
    /**
     * 根据用户ID和完成状态查找章节学习进度
     */
    List<StudentChapter> findByUserIdAndIsFinished(String userId, Boolean isFinished);
    
    /**
     * 根据章节ID和完成状态查找学生学习进度
     */
    List<StudentChapter> findByChapterIdAndIsFinished(String chapterId, Boolean isFinished);
    
    /**
     * 统计用户已完成的章节数量
     */
    @Query("SELECT COUNT(sc) FROM StudentChapter sc WHERE sc.userId = :userId AND sc.isFinished = true")
    long countCompletedChaptersByUserId(@Param("userId") String userId);
    
    /**
     * 统计章节的完成人数
     */
    @Query("SELECT COUNT(sc) FROM StudentChapter sc WHERE sc.chapterId = :chapterId AND sc.isFinished = true")
    long countCompletedStudentsByChapterId(@Param("chapterId") String chapterId);
    
    /**
     * 根据用户ID和章节ID查找学习进度
     */
    Optional<StudentChapter> findByUserIdAndChapterId(String userId, String chapterId);
    
    /**
     * 检查用户是否完成了指定章节
     */
    @Query("SELECT sc FROM StudentChapter sc WHERE sc.userId = :userId AND sc.chapterId = :chapterId AND sc.isFinished = true")
    Optional<StudentChapter> findCompletedChapter(@Param("userId") String userId, @Param("chapterId") String chapterId);
    
    /**
     * 根据用户ID和章节ID列表查找已完成的学习进度
     */
    List<StudentChapter> findByUserIdAndChapterIdInAndIsFinishedTrue(String userId, List<String> chapterIds);
    
    /**
     * 根据用户ID列表查找章节学习进度
     */
    List<StudentChapter> findByUserIdIn(List<String> userIds);
    
    /**
     * 根据章节ID列表查找学习进度
     */
    List<StudentChapter> findByChapterIdIn(List<String> chapterIds);
    
    /**
     * 删除用户的所有章节学习进度
     */
    void deleteByUserId(String userId);
    
    /**
     * 删除章节的所有学习进度记录
     */
    void deleteByChapterId(String chapterId);
}